import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
var _excluded = ["rules", "name", "phoneName", "fieldProps", "captchaTextRender", "captchaProps"];
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { Button, Form, Input } from 'antd-v4';
import React, { useEffect, useImperativeHandle, useState } from 'react';
import { createField } from '../../BaseForm/createField';
var BaseProFormCaptcha = /*#__PURE__*/React.forwardRef(function (props, ref) {
  var _useState = useState(props.countDown || 60),
      _useState2 = _slicedToArray(_useState, 2),
      count = _useState2[0],
      setCount = _useState2[1];

  var _useState3 = useState(false),
      _useState4 = _slicedToArray(_useState3, 2),
      timing = _useState4[0],
      setTiming = _useState4[1];

  var _useState5 = useState(),
      _useState6 = _slicedToArray(_useState5, 2),
      loading = _useState6[0],
      setLoading = _useState6[1]; // 这么写是为了防止restProps中 带入 onChange, defaultValue, rules props tabUtil


  var rules = props.rules,
      name = props.name,
      phoneName = props.phoneName,
      fieldProps = props.fieldProps,
      _props$captchaTextRen = props.captchaTextRender,
      captchaTextRender = _props$captchaTextRen === void 0 ? function (paramsTiming, paramsCount) {
    return paramsTiming ? "".concat(paramsCount, " \u79D2\u540E\u91CD\u65B0\u83B7\u53D6") : '获取验证码';
  } : _props$captchaTextRen,
      captchaProps = props.captchaProps,
      restProps = _objectWithoutProperties(props, _excluded);

  var onGetCaptcha = /*#__PURE__*/function () {
    var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(mobile) {
      return _regeneratorRuntime().wrap(function _callee$(_context) {
        while (1) {
          switch (_context.prev = _context.next) {
            case 0:
              _context.prev = 0;
              setLoading(true);
              _context.next = 4;
              return restProps.onGetCaptcha(mobile);

            case 4:
              setLoading(false);
              setTiming(true);
              _context.next = 13;
              break;

            case 8:
              _context.prev = 8;
              _context.t0 = _context["catch"](0);
              setTiming(false);
              setLoading(false); // eslint-disable-next-line no-console

              console.log(_context.t0);

            case 13:
            case "end":
              return _context.stop();
          }
        }
      }, _callee, null, [[0, 8]]);
    }));

    return function onGetCaptcha(_x) {
      return _ref.apply(this, arguments);
    };
  }();
  /**
   * 暴露ref方法
   */


  useImperativeHandle(ref, function () {
    return {
      startTiming: function startTiming() {
        return setTiming(true);
      },
      endTiming: function endTiming() {
        return setTiming(false);
      }
    };
  });
  useEffect(function () {
    var interval = 0;
    var countDown = props.countDown;

    if (timing) {
      interval = window.setInterval(function () {
        setCount(function (preSecond) {
          if (preSecond <= 1) {
            setTiming(false);
            clearInterval(interval); // 重置秒数

            return countDown || 60;
          }

          return preSecond - 1;
        });
      }, 1000);
    }

    return function () {
      return clearInterval(interval);
    }; // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [timing]);
  return _jsx(Form.Item, {
    noStyle: true,
    shouldUpdate: true,
    children: function children(_ref2) {
      var getFieldValue = _ref2.getFieldValue,
          validateFields = _ref2.validateFields;
      return _jsxs("div", {
        style: _objectSpread(_objectSpread({}, fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.style), {}, {
          display: 'flex',
          alignItems: 'center'
        }),
        ref: ref,
        children: [_jsx(Input, _objectSpread(_objectSpread({}, fieldProps), {}, {
          style: {
            flex: 1,
            transition: 'width .3s',
            marginRight: 8
          }
        })), _jsx(Button, _objectSpread(_objectSpread({
          style: {
            display: 'block'
          },
          disabled: timing,
          loading: loading
        }, captchaProps), {}, {
          onClick: function () {
            var _onClick = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
              var mobile;
              return _regeneratorRuntime().wrap(function _callee2$(_context2) {
                while (1) {
                  switch (_context2.prev = _context2.next) {
                    case 0:
                      _context2.prev = 0;

                      if (!phoneName) {
                        _context2.next = 9;
                        break;
                      }

                      _context2.next = 4;
                      return validateFields([phoneName].flat(1));

                    case 4:
                      mobile = getFieldValue([phoneName].flat(1));
                      _context2.next = 7;
                      return onGetCaptcha(mobile);

                    case 7:
                      _context2.next = 11;
                      break;

                    case 9:
                      _context2.next = 11;
                      return onGetCaptcha('');

                    case 11:
                      _context2.next = 16;
                      break;

                    case 13:
                      _context2.prev = 13;
                      _context2.t0 = _context2["catch"](0);
                      // eslint-disable-next-line no-console
                      console.log(_context2.t0);

                    case 16:
                    case "end":
                      return _context2.stop();
                  }
                }
              }, _callee2, null, [[0, 13]]);
            }));

            function onClick() {
              return _onClick.apply(this, arguments);
            }

            return onClick;
          }(),
          children: captchaTextRender(timing, count)
        }))]
      });
    }
  });
});
var ProFormCaptcha = createField(BaseProFormCaptcha);
export default ProFormCaptcha;